#ifndef DATA_H
#define DATA_H

class Data
{
	public:
		Data(){}
		virtual ~Data(){}

		virtual bool equal(Data* data) = 0;
		virtual void copy(Data** data) = 0;
		virtual Data* allocate() = 0;
		virtual void print() = 0;

		bool operator==(const Data &data)
		{
			return equal((Data*)&data);
		}
};

#endif
